#pragma once
#include <iostream>
#include <string>
#include <cstring>
#include <memory>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

#define CONV(addr) ((struct sockaddr *)&addr)

enum ExitCode
{
    OK = 0,
    USAGE_ERR,   // 命令行输入不对
    SOCKET_ERR,  // 创建套接字失败
    BIND_ERR,    // 绑定失败
    LISTEN_ERR,  // 监听错误
    CONNECT_ERR, // 客户端建立连接错误
    FOCK_ERR,    // 创建fd错误
    OPEN_ERR,    // 打开文件失败
};

// 禁止拷贝的类
// 让我们的服务器类继承这个类，就可以实现一个禁止复制拷贝的服务器
// 因为我们让其继承这个类，如果想进行拷贝，就得先把基类拷贝一份
// 而我们这个类就是禁止拷贝和赋值的
class NoCopy
{
public:
    NoCopy() {}

    NoCopy(const NoCopy &) = delete;

    const NoCopy &operator=(const NoCopy &) = delete;

    ~NoCopy() {}

private:
};
